home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / art&graf.ix / art-0015 / flicker / gfx.asm < prev    next >
Assembly Source File  |  1997-04-16  |  4KB  |  205 lines

  1.  
  2.     public _cscreen
  3.     public conv_1
  4.  
  5.     ; clear_screen()
  6.     public _clear_screen
  7. _clear_screen:
  8.     movem.l D2/D3/D4/D5/D6/D7/A2/A3/A4,-(A7) ; save the world
  9.     move.w #200-1,D0
  10.     move.l    #0,d1
  11.     move.l    d1,d2
  12.     move.l    d2,d3
  13.     move.l    d3,d4
  14.     move.l    d4,d5
  15.     move.l    d5,d6
  16.     move.l    d6,d7
  17.     move.l    d7,a2
  18.     move.l    a2,a3
  19.     move.l    a3,a4
  20.     move.l    _cscreen,a0
  21.     adda    #32000,a0
  22. cl_lp:  
  23.     movem.l D1/D2/D3/D4/D5/D6/D7/A2/A3/A4,-(A0)
  24.     movem.l D1/D2/D3/D4/D5/D6/D7/A2/A3/A4,-(A0)
  25.     movem.l D1/D2/D3/D4/D5/D6/D7/A2/A3/A4,-(A0)
  26.     movem.l D1/D2/D3/D4/D5/D6/D7/A2/A3/A4,-(A0)
  27.     dbf    D0,cl_lp
  28.     movem.l (A7)+,D2/D3/D4/D5/D6/D7/A2/A3/A4
  29.     rts
  30.  
  31.     ; copy_screen(source, dest)  32000-byte block copy 
  32.     public _copy_screen
  33. _copy_screen:
  34.     move.l    4(sp),a0
  35.     move.l    8(sp),a1
  36.     movem.l D2/D3/D4/D5/D6/D7/A2/A3/A4,-(A7) ; save the world
  37.     move.w #200-1,D0
  38. cp_lp:  
  39.     movem.l (A0)+,D1/D2/D3/D4/D5/D6/D7/A2/A3/A4
  40.     movem.l D1/D2/D3/D4/D5/D6/D7/A2/A3/A4,(A1)
  41.     movem.l (A0)+,D1/D2/D3/D4/D5/D6/D7/A2/A3/A4
  42.     movem.l D1/D2/D3/D4/D5/D6/D7/A2/A3/A4,40(A1)
  43.     movem.l (A0)+,D1/D2/D3/D4/D5/D6/D7/A2/A3/A4
  44.     movem.l D1/D2/D3/D4/D5/D6/D7/A2/A3/A4,80(A1)
  45.     movem.l (A0)+,D1/D2/D3/D4/D5/D6/D7/A2/A3/A4
  46.     movem.l D1/D2/D3/D4/D5/D6/D7/A2/A3/A4,120(A1)
  47.     adda    #160,A1
  48.     dbf    D0,cp_lp
  49.     movem.l (A7)+,D2/D3/D4/D5/D6/D7/A2/A3/A4
  50.     rts
  51.  
  52.     ; exchange_screen(s1, s2)  32000-byte array swap
  53.     public _exchange_screen
  54. _exchange_screen
  55.     move.l    4(sp),a0
  56.     move.l    8(sp),a1
  57.     move.l D2,-(A7) ; save the world
  58.     move.w #8000-1,D0
  59. ex_lp:  move.l (A0),D1
  60.     move.l (A1),D2
  61.     move.l D2,(A0)+
  62.     move.l D1,(A1)+
  63.     dbf    D0,ex_lp
  64.     move.l (A7)+,D2
  65.     rts
  66.  
  67.  
  68.     ; calc_mask( source, dest, words)
  69.     ;    or together source 4 words at a time and put it into dest
  70.     ;    dest is words long
  71.     public _calc_mask
  72. _calc_mask
  73.     move.l    4(sp),a0
  74.     move.l    8(sp),a1
  75.     move.w    12(sp),d0
  76.     bra zcm_loop
  77. cm_loop    move.w (a0)+,d1
  78.     or.w    (a0)+,d1
  79.     or.w    (a0)+,d1
  80.     or.w    (a0)+,d1
  81.     not.w    d1
  82.     move.w    d1,(a1)+
  83. zcm_loop dbra    d0,cm_loop
  84.     rts
  85.  
  86.  
  87.  
  88.  
  89.     ;    line_zero( line )
  90.     ;        see if next 160 bytes are zero
  91.     public _line_zero
  92. _line_zero
  93.     move.l    4(sp),a0
  94.     move.w    #39,d0
  95. lz_loop    tst.l    (a0)+
  96.     bne    not_z
  97.     dbra d0,lz_loop
  98.     move.w    #1,d0
  99.     rts
  100. not_z    move.w    #0,d0
  101.     rts
  102.  
  103.  
  104.  
  105.  
  106.     ;    first_zeros( line )
  107.     ;        return count of zeroes at start of line
  108.     public _first_zeros
  109. _first_zeros
  110.     move.l    4(sp),a1
  111.     movem.w D2/D3/D4/D5/D6/D7,-(A7) ; save the world
  112.     move.w    #19,d1
  113.     move.w #0,d0
  114. f16_loop    tst.l    (a1)
  115.     bne    f16z
  116.     tst.l    4(a1)
  117.     bne f16z
  118.     add.w    #16,d0
  119.     adda    #8,a1
  120.     dbra    d1,f16_loop
  121. f16z 
  122.     suba    #16,sp
  123.     move.l    sp,a0    ;set a0 to temp buffer
  124.     jsr        conv_1
  125.     move.l    sp,a0    ;and reset to buffer after conv_1
  126.     move.w    #15,d1
  127. f_loop2    tst.b    (a0)+
  128.     bne fz
  129.     addq.w    #1,d0
  130.     dbra    d1,f_loop2
  131. fz    adda    #16,sp    ;clean off buffer
  132.     movem.w (A7)+,D2/D3/D4/D5/D6/D7
  133.     rts
  134.  
  135.  
  136.  
  137.  
  138.     ;    last_zeros( line )
  139.     ;        return count of zeroes at end of line
  140.     public _last_zeros
  141. _last_zeros
  142.     move.l 4(sp),a1
  143.     movem.w D2/D3/D4/D5/D6/D7,-(A7) ; save the world
  144.     adda    #160,a1
  145.     move.w    #19,d1
  146.     move.w #320,d0
  147. l16_loop    
  148.     suba    #8,a1
  149.     tst.l    4(a1)
  150.     bne    l16z
  151.     tst.l (a1)    
  152.     bne l16z
  153.     sub.w    #16,d0
  154.     dbra d1,l16_loop
  155. l16z    
  156.     suba    #16,sp
  157.     move.l    sp,a0    ;set a0 to temp buffer
  158.     jsr        conv_1
  159.     move.w    #15,d1
  160. l_loop2    tst.b    -(a0)
  161.     bne lz
  162.     subq.w    #1,d0
  163.     dbra    d1,l_loop2
  164. lz    adda    #16,sp    ;clean off buffer
  165.     movem.w (A7)+,D2/D3/D4/D5/D6/D7
  166.     rts
  167.  
  168.  
  169.     ; Convert all the non-zero colors on cscreen to color 1
  170.     public _b_pic
  171. _b_pic
  172.     move.w    #4000-1,d0
  173.     move.l    _cscreen,a0
  174. blop    move.w (a0)+,d1
  175.     or.w    (a0)+,d1
  176.     or.w    (a0)+,d1
  177.     or.w    (a0),d1    
  178.     suba    #6,a0
  179.     move.w    d1,(a0)+
  180.     clr.w    (a0)+
  181.     clr.w    (a0)+
  182.     clr.w    (a0)+
  183.     dbra    d0,blop
  184.     rts
  185.  
  186.  
  187.     ; convert color ones to color zeroes on cscreen
  188.     public _ub_pic
  189. _ub_pic
  190.     move.w #4000-1,d0
  191.     move.l _cscreen,a0
  192. ublop    move.w (a0)+,d1
  193.     not.w    d1
  194.     or.w    (a0)+,d1
  195.     or.w    (a0)+,d1
  196.     or.w    (a0),d1
  197.     suba #6,a0
  198.     and.w    d1,(a0)+
  199.     and.w    d1,(a0)+
  200.     and.w    d1,(a0)+
  201.     and.w    d1,(a0)+
  202.     dbra d0,ublop
  203.     rts
  204.  
  205.